package com.qcit.common.work

import android.content.Context
import android.util.Log
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.google.gson.stream.JsonReader
import com.qcit.common.data.AppDatabase
import com.qcit.common.data.Constants
import com.qcit.common.data.OrderMenu
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import java.io.IOException
import java.io.InputStreamReader

// 此任务  ：指定一个任务，让WorkManager，（assets/plants.json 所有的数据 插入到 ROOM plant数据表中去）
class OrderMenuDatabaseWorker(context: Context, workerParams: WorkerParameters) :
    Worker(context, workerParams) {
    override fun doWork(): Result {
        GlobalScope.launch(Dispatchers.IO) {
            // insert 插入进去
            try {

                val input = applicationContext.assets.open(Constants.ORDER_MENU)
                val reader = JsonReader(InputStreamReader(input))
                val plantType = object : TypeToken<List<OrderMenu?>?>() {}.type
                val list = Gson().fromJson<List<OrderMenu>>(reader, plantType)
                input.close()
                val database = AppDatabase.getInstance(applicationContext)

                // 把 assets/plants.json 所有的数据 插入到 ROOM plant数据表中去
                database!!.orderMenuDao!!.insertAll(list)
                Result.success() // 本次任务成功
            } catch (e: IOException) {
                Log.e(
                    TAG, "Error seeding database  " +
                            "把 assets/plants.json 所有的数据 插入到 ROOM plant数据表中去失败了，错误详情是", e
                )
                Result.failure() // 本次任务失败
            }
        }
        return  Result.success()
    }

    companion object {
        private val TAG = OrderMenuDatabaseWorker::class.java.simpleName
    }
}